package cn.isjinhao.se.script.generator;

import cn.isjinhao.se.structure.impl.Table;
import cn.isjinhao.se.script.FileWrapper;
import cn.isjinhao.se.script.SqlTemplate;
import cn.isjinhao.se.util.CamelUnderlineUtil;

import java.util.List;
import java.util.function.Function;

/**
 * 在生成insert语句的时候，可以选择主键自增。
 *
 * @Author ISJINHAO
 * @Date 2021/6/30 9:05
 */
public interface ScriptGenerator {

    /**
     *
     * @param file
     * @param scriptSql
     * @param columnMapping 用于将从文件中读取出来的列名称映射到真正的列名称
     * @return
     */
    List<String> generateSqlScript(FileWrapper file, SqlTemplate scriptSql, Function<String, String> columnMapping);

    /**
     *
     * @param table
     * @param scriptSql
     * @param columnMapping 用于将参数table中的列名称映射到真正的列名称
     * @return
     */
    List<String> generateSqlScript(Table table, SqlTemplate scriptSql, Function<String, String> columnMapping);

    /**
     *
     * @param table
     * @param scriptSql
     * @return
     */
    default List<String> generateSqlScript(Table table, SqlTemplate scriptSql) {
        return generateSqlScript(table, scriptSql, item -> item);
    }


    /**
     *
     * 从文件中生成的时候
     *
     * @param file
     * @param clazz
     * @param propertyMapping   按照类的结构生成的时候，使用
     * @return
     */
    List<String> generateSqlScript(FileWrapper file, Class<?> clazz, Function<String, String> propertyMapping);

    default List<String> generateSqlScript(FileWrapper file, Class<?> clazz) {
        return generateSqlScript(file, clazz, CamelUnderlineUtil::camelToUnderline);
    }

}
